/* 购物车页面的Store模块 */
export default {
  // 为当前模块开启命名空间
  namespaced: true,

  // 模块的数据
  state: () => ({
    // 购物车的数组，用来存储购物车中每个商品的信息对象
    // 规定每个商品的信息对象，都包含如下 6 个属性：
    // { goods_id, goods_name, goods_price, goods_count, goods_small_logo, goods_state }
    cart: JSON.parse(uni.getStorageSync('cart') || '[]')
  }),

  // 模块的 mutations 方法
  mutations: {
    // 加入购物车
    addToCart(state, goods) {
      // 判断购物车中是否存在该商品: 存在返回该商品对象，不存在返回undefined
      const findResult = state.cart.find(x => x.goods_id === goods.goods_id);
      // console.log(findResult)
      // 不存在：则将该商品添加到购物车数组中
      if (!findResult) {
        state.cart.push(goods);
      } else {
        // 存在：则让商品数量+1
        findResult.goods_count++;
      }
      // console.log(state.cart)
      // 调用saveToStorage将购物车数据存储到本地
      this.commit('m_cart/saveToStorage')
    },
    // 将购物车数据存储到本地
    saveToStorage(state) {
      uni.setStorageSync('cart', JSON.stringify(state.cart))
    },
    // 更新购物车中商品的勾选状态
    updateGoodsState(state, goods) {
      // 从购物车的数据数组cart中查找该商品
      const findResult = state.cart.find(x => x.goods_id === goods.goods_id);
      // 存在：则修改cart数据中对应商品的勾选状态
      if (findResult) {
        // 修改勾选状态
        findResult.goods_state = goods.goods_state;
        // 将购物车数据持久化
        this.commit('m_cart/saveToStorage');
      }
    },
    // 更新购物车中商品的数量
    updateGoodsCount(state, goods) {
      // 从购物车的数据数组cart中查找该商品
      const findResult = state.cart.find(x => x.goods_id === goods.goods_id);
      // 存在：则修改cart数据中对应商品的数量
      if (findResult) {
        // 修改数量
        findResult.goods_count = goods.goods_count;
        // 将购物车数据持久化
        this.commit('m_cart/saveToStorage');
      }
    },
    // 根据 Id 从购物车中删除对应的商品信息
    removeGoodsById(state, goods_id) {
      // 调用数组的 filter 方法进行过滤
      state.cart = state.cart.filter(x => x.goods_id !== goods_id)
      // 持久化存储到本地
      this.commit('m_cart/saveToStorage')
    },
    // 实现点击全选按钮，让购物车中所有商品都被选中
    updateAllGoodsState(state, newState) {
      state.cart.forEach(x => x.goods_state = newState);
      this.commit('m_cart/saveToStorage');
    }
  },

  // 模块的 getters 属性
  getters: {
    // 总数量
    total(state) {
      // let c = 0;
      // state.cart.forEach(x => c += x.goods_count)
      // return c;
      return state.cart.reduce((total, item) => total += item.goods_count, 0)
    },
    // 选中的数量
    checkedCount(state) {
      // 先循环得出所有被选中的商品，再循环计算出被选中的商品的数量
      return state.cart.filter(x => x.goods_state).reduce((total, item) => total += item.goods_count, 0)
    },
    // 已选中的商品的总价格
    checkedGoodsAmount(state) {
      return state.cart.filter(x => x.goods_state)
        .reduce((total, item) => total += item.goods_price * item.goods_count, 0)
        .toFixed(2);
    }
  }
}
